
// 将字节数据格式化为类似 Wireshark 的十六进制/ASCII 显示
pub fn format_data_as_lines(data: &[u8], max_lines: usize) -> String {
    let mut output = String::new();
    let total_lines = (data.len() + 15) / 16;  // 计算总行数
    let display_lines = std::cmp::min(total_lines, max_lines);

    for line in 0..display_lines {
        let offset = line * 16;
        let line_data = &data[offset..std::cmp::min(offset + 16, data.len())];

        // 格式化十六进制部分
        let hex_part = format!("{:04X}  ", offset)
            + &line_data.iter()
            .map(|b| format!("{:02X} ", b))
            .collect::<String>()
            + &"   ".repeat(16 - line_data.len());

        // 格式化 ASCII 部分
        let ascii_part = line_data.iter()
            .map(|&b| if (32..=126).contains(&b) { b as char } else { '.' })
            .collect::<String>();

        output.push_str(&format!("    {}  {}\n", hex_part, ascii_part));
    }

    // 添加省略号（如果有截断）
    if total_lines > max_lines {
        output.push_str(&format!("    ... and {} more bytes\n", data.len() - (max_lines * 16)));
    }

    output
}
